package com.framework;


import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;

/**
 * 将其本身也注册为一个 Bean，动态修改 Bean 的作用域。
 *
 * @author zhaojy
 * @date 2025/11/17-2:26 下午
 */
@Component
public class MyScopeBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		System.out.println("MyScopeBeanFactoryPostProcessor 正在执行...");

		// 1. 获取 "userService" 这个 Bean 的定义
		BeanDefinition beanDefinition = beanFactory.getBeanDefinition("userService");

		// 2. 修改其作用域为 Prototype (多例)
		beanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE);

		System.out.println("已将 userService 的作用域修改为 prototype");
	}
}